package com.shell.customer.base.controller;

import com.shell.bee.base.annotation.Logging;
import com.shell.bee.entity.auth.AuthOrgan;
import com.shell.bee.entity.mvc.RetMsg;
import com.shell.bee.persistence.model.PageLimit;
import com.shell.customer.base.service.BankAcctModifyService;
import com.shell.customer.base.service.CusTagService;
import com.shell.customer.base.vo.CusAcctVo;
import com.shell.customer.group.service.CusGrpService;
import com.shell.customer.po.CusGrp;
import com.shell.customer.po.CusInfoAprv;
import com.shell.framework.utils.CommonDataUtil;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AccountController {
	@Autowired
	private BankAcctModifyService bankAcctService;
	@Autowired
	private CusGrpService cusGrpService;
	@Autowired
	private CusTagService cusTagService;

	@RequestMapping
	@Logging(module = "��������", methods = "��������������")
	public RetMsg setDefault(String acctId) {
		this.bankAcctService.setDefault(acctId);
		return new RetMsg("success", true, "����������������");
	}

	@RequestMapping
	@Logging(module = "��������", methods = "��������")
	public RetMsg setInvalid(String acctId) {
		this.bankAcctService.setInvalid(acctId);
		return new RetMsg("success", true, "����������");
	}

	@RequestMapping
	@Logging(module = "��������", methods = "����������������")
	public List<CusAcctVo> getAccounts() {
		return this.bankAcctService.getAccts();
	}

	@RequestMapping
	@Logging(module = "��������", methods = "������������������")
	public List<CusAcctVo> getAprvAccts(PageLimit limit, CusAcctVo acctVo) {
		String tagCodes = "";
		String[] grpIdArr = null;
		if ("R".equals(acctVo.getAcctState())) {
			tagCodes = "GROUP_FIRST_TRIAL";
		} else if ("E".equals(acctVo.getAcctState())) {
			tagCodes = "GROUP_LAST_TRIAL";
		}
		List<CusGrp> grps = this.cusGrpService.selectCusGroupByTagCode(CommonDataUtil.getCurEntId(), tagCodes);
		if (grps != null) {
			List<String> grpArr = new ArrayList();
			for (CusGrp grp : grps) {
				grpArr.add(grp.getGrpId());
			}
			grpIdArr = (String[]) grpArr.toArray(new String[grpArr.size()]);
		}
		acctVo.setGrpIds(grpIdArr);
		return this.bankAcctService.getAprvAccts(limit, acctVo);
	}

	@RequestMapping
	@Logging(module = "��������", methods = "������������")
	public RetMsg addAcct(CusAcctVo acctVo) {
		this.bankAcctService.addAcct(acctVo);
		AuthOrgan organ = CommonDataUtil.getCurEnt();
		if ((!"FINNER".equals(organ.getCusType())) && (!this.cusTagService.hasTag(organ.getOrganId(), null, "OPERATOR"))
				&& (!this.cusTagService.hasTag(organ.getOrganId(), null, "FOCAL_CO"))) {
			return new RetMsg("success", true, "��������������������������1-3����������������������������������������");
		}
		return new RetMsg("success", true, "������������������");
	}

	@RequestMapping
	@Logging(module = "��������", methods = "��������")
	public RetMsg payAmountAuth(String acctId, BigDecimal amount) {
		RetMsg retMsg = this.bankAcctService.payAmountAuth(acctId, amount);
		if ("success".equals(retMsg.getType())) {
			return new RetMsg("success", true, "��������������������������1-3����������������������������������������");
		}
		return retMsg;
	}

	@RequestMapping
	@Logging(module = "��������", methods = "��������")
	public RetMsg trialReject(CusInfoAprv acctAprv) {
		this.bankAcctService.trialReject(acctAprv);
		return new RetMsg("success", true, "��������");
	}

	@RequestMapping
	@Logging(module = "��������", methods = "��������")
	public RetMsg trialPass(CusInfoAprv acctAprv) {
		this.bankAcctService.trialPass(acctAprv);
		return new RetMsg("success", true, "������������������");
	}

	@RequestMapping
	@Logging(module = "��������", methods = "��������")
	public RetMsg finalReject(CusInfoAprv acctAprv) {
		this.bankAcctService.finalReject(acctAprv);
		return new RetMsg("success", true, "������������");
	}

	@RequestMapping
	@Logging(module = "��������", methods = "��������")
	public RetMsg finalPass(CusInfoAprv acctAprv) {
		this.bankAcctService.finalPass(acctAprv);
		return new RetMsg("success", true, "������������");
	}

	@RequestMapping
	@Logging(module = "����������", methods = "������������������������������")
	public Integer countAccountNum() {
		List<CusAcctVo> list = this.bankAcctService.getAccts();
		if (list != null) {
			return Integer.valueOf(list.size());
		}
		return Integer.valueOf(0);
	}
}
